/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package entidades;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 *
 * @author alumno
 */
public class POS {
    List<Tarjeta> tarjetas;
    List<Cliente> clientes;
    List<Local> locales;
    
    public POS() {
        tarjetas = new ArrayList<Tarjeta>();
        clientes = new ArrayList<Cliente>();
        locales = new  ArrayList<Local>();
    }

    public List<Tarjeta> getTarjetas() {
        return tarjetas;
    }

    public void setTarjetas(List<Tarjeta> tarjetas) {
        this.tarjetas = tarjetas;
    }

    public List<Cliente> getClientes() {
        return clientes;
    }

    public void setClientes(List<Cliente> clientes) {
        this.clientes = clientes;
    }

    public List<Local> getLocales() {
        return locales;
    }

    public void setLocales(List<Local> locales) {
        this.locales = locales;
    }    
    
    public void registrarBatchTarjetas(List<Tarjeta> nuevasTarjetas){
        tarjetas.addAll(nuevasTarjetas);
    }
    public boolean activarTarjeta(String numeroTarjeta, String nombreCompleto, String dni){
        Cliente cliente = new Cliente();
        cliente.setNombreCompleto(nombreCompleto);
        cliente.setFechaRegistro(new Date());
        return activarTarjeta(numeroTarjeta, cliente);
    }
    
    public boolean activarTarjeta(String numeroTarjeta, Cliente cliente){
        Tarjeta tarjeta = getTarjeta(numeroTarjeta);
        if (tarjeta == null){
            return false;
        }
        if(!isClienteRegistrado(cliente.getDni())){
            registrarCliente(cliente);
        }else{
            desactivarTarjetasCliente(cliente);
        }
        tarjeta.setActiva(true);
        tarjeta.setCliente(cliente);
        cliente.setTarjeta(tarjeta);
        tarjeta.setFechaActivacion(new Date());
        return true;
    }
    
    private void desactivarTarjetasCliente(Cliente cliente){
        for (Tarjeta tarjeta : tarjetas) {
            if(tarjeta.getCliente() == cliente){
                tarjeta.setActiva(false);
            }
        }
    }
    
    private boolean isClienteRegistrado(String dni){
        for (Cliente cliente : clientes) {
            if(cliente.getDni().equals(dni)){
                return true;
            }
        }
        return false;
    }
    
    private void registrarCliente(Cliente cliente){
         clientes.add(cliente);
    }
    
    public Tarjeta getTarjeta(String numero){
        Tarjeta tarjeta = null;
        for (Tarjeta tarjeta1 : tarjetas) {
            if(!tarjeta1.isActiva() & tarjeta1.getNumero().equals(numero)){
                tarjeta = tarjeta1;break;
            }
        }
        return tarjeta;
    }
    
    public boolean registrarLocal(String nombreLocal, List<Premio> premios){
        Local local = new Local();
        local.setNombre(nombreLocal);        
        return registrarLocal(local, premios);
    }
    
    public boolean registrarLocal(Local local, List<Premio> premios){
        if(isLocalRegistrado(local.getNombre())){
            return false;
        }
        local.setPremios(premios);
        locales.add(local);
        return true;
    }
    
    private boolean isLocalRegistrado(String nombre){
        for (Local local : locales) {
            if(local.getNombre().equals(nombre)){
                return true;
            }
        }
        return false;
    }
    
    private Local getLocal(String nombre){
        Local local = null;
        for (Local local1 : locales) {
            if(local1.getNombre().equalsIgnoreCase(nombre) ){
                local = local1; break; 
            }
        }
        return local;
    }
    
    public void checkinLocal(Cliente cliente, String nombreLocal){
        Local local = getLocal(nombreLocal);
        local.checkin(cliente);
    }
    
    public Premio canjearPremio(Cliente cliente, String nombreLocal, String premio) throws Exception{
        Local local = getLocal(nombreLocal);
        return local.canjearPremio(cliente, premio);
    }
    
}
